home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / a / a_funk / satellit.tos / SATELLIT / NORAD.GNI / NORAD.GFA next >
Encoding:
Text File  |  1995-04-30  |  35.8 KB  |  1,094 lines

  1. bbs> Msg# 116919   To: ATARI @ALLE   From: DJ5JQ   Date: 22Mar91/0611
  2. Subject: NORAD.GFA
  3. Bulletin ID: 21310EDB0IZ
  4. Path: DB0CZ!OE9XPI!HB9EAS!DB0GE!LX0PAC!ON7RC!PI8HRL!DB0IZ
  5. de DJ5JQ @ DB0IZ
  6.  
  7. Hallo OM's
  8.  
  9. das folgende Programm ist mir kürzlich in die Hände gefallen.
  10. Die Keplerelemente müssen in einer Datei "ORBITALS.DAT" im NASA-Format
  11. vorliegen.
  12. Viel Spaβ damit ...
  13.  
  14. 73 Ecki, DJ5JQ @ DB0QS
  15.  
  16. REM      N.O.R.A.D. V2.0 The graphic realtime satellite tracking program.
  17. REM                    ATARI ST -- GFA BASIC 3.07
  18. REM               Please customize the six lines below.
  19. REM
  20. tlocal=-5             ! Your time difference from GMT (UTC). i.e. -5 = CDT
  21. l9=45.0709            ! Your latitude, degrees.fraction-of-degrees.
  22. w9=93.1567            ! Your longitude, degrees.fraction. i.e +values for USA
  23. h9=980                ! Your altitude above sea-level. (Feet)
  24. el$="C:\orbitals.dat" ! Path to orbital elements file. (NASA Predictions)
  25. ms=2000               ! Maximum number of satellites. (To reserve space)
  26. REM
  27. MODE 1                ! GFA Basic 3.07 compiler default override.
  28. REM
  29. REM Orbital calculation subroutines from the AMSAT Orbital Prediction Program
  30. REM (C) 1980 by Dr. T. A. Clark W3IWI, 6388 Guilford Road, Clarksville MD
  31. REM 21209 USA.  "Permission granted for non-commercial use provided credit is
  32. REM given to author, AMSAT and ORBIT magazine.  See ORBIT issue 6, March/
  33. REM April 1981.  Ported to ATARI ST BASIC by Scott Tilley (1/24/87.)
  34. REM
  35. REM Graphic interface and world map by John Logajan, 4248 Hamline, Arden Hills
  36. REM MN 55112 USA. 6/3/90  Graphic interface and map code are released into
  37. REM the public domain.    logajan@ns.network.com   john@logajan.mn.org
  38. REM
  39. CLS
  40. h9=h9*12/39.37  ! convert feet height to meters
  41. REPEAT
  42.   REPEAT
  43.     DEFTEXT 3,0,0,32
  44.     TEXT 100,25,0,"Welcome to N.O.R.A.D.   V2"
  45.     DEFTEXT 1,0,0,13
  46.     TEXT 105,45,0,"Your clock said the time was:  "+DATE$+"  "+TIME$
  47.     DEFTEXT 2,0,0,13
  48.     TEXT 100,61,0,"Please be sure it is set to the EXACT time and date!"
  49.     TEXT 175,152,0,"Press the HELP-key for instructions."
  50.     TEXT 220,170,0,"Press the ESC-key to exit."
  51.     TEXT 80,186,0,"- Point at satellite of interest and click to get its info -"
  52.     a$="Want to set/reset the clock?"
  53.     ALERT 2,a$,1,"No need|SetClock|Quit!",but
  54.     IF but=3
  55.       EDIT
  56.     ENDIF
  57.     IF but=2
  58.       CLS
  59.       PRINT "Enter date (or RETURN to skip)"
  60.       PRINT
  61.       PRINT "Use the format  month/day/year."
  62.       PRINT "Be sure to use two digits (leading zeroes) for each."
  63.       PRINT "Otherwise the system will ignore the new date."
  64.       PRINT
  65.       PRINT DATE$;
  66.       INPUT "  Date ";d$
  67.       CLS
  68.       PRINT "Enter local time (or RETURN to skip)"
  69.       PRINT
  70.       PRINT "Use the format  hour:minute:second."
  71.       PRINT "Be sure to use two digits (leading zeroes) for each."
  72.       PRINT "Otherwise the system will ignore the new time."
  73.       PRINT
  74.       PRINT TIME$;
  75.       INPUT "  Time ";t$
  76.       SETTIME t$,d$
  77.     ENDIF
  78.     CLS
  79.   UNTIL but=1
  80.   y=VAL(RIGHT$(DATE$,4))-1900
  81.   IF y<89
  82.     PRINT "          Is it really the year ";1900+y;" ?"
  83.     PRINT "I haven't made the program so it can work in years before 1989,"
  84.     PRINT "so I am going to force you to set your clock/calender."
  85.     ALERT 1," ",1,"continue",but
  86.     CLS
  87.   ENDIF
  88. UNTIL y>=89
  89. IF y/4=INT(y/4)
  90.   f9=1
  91. ELSE
  92.   f9=0                   ! leap-year flag
  93. ENDIF
  94. d=VAL(MID$(DATE$,4,2))
  95. m=VAL(LEFT$(DATE$,2))
  96. REM Calculate day of year
  97. DATA 0,31,59,90,120,151,181,212,243,273,304,334
  98. FOR i=1 TO 12
  99.   READ d9x
  100.   IF i=m
  101.     d9=d9x
  102.   ENDIF
  103. NEXT i
  104. d8=d+d9
  105. IF m>2
  106.   d8=d8+f9
  107. ENDIF
  108. t$=TIME$
  109. tstart=TIMER
  110. h=VAL(LEFT$(t$,2))
  111. s=VAL(RIGHT$(t$,2))
  112. m=VAL(MID$(t$,4,2))
  113. t7=d8+h/24+m/1440+s/86400-tlocal/24
  114. leapy=30/60/60/24
  115. r0=6378.135                          ! earth mean diameter km
  116. f=298.25                             ! delta diameter km
  117. f=1/f
  118. g0=75369793000000                    ! gravitational constant
  119. g1=1.0027379093                      ! sidereal/solar ratio
  120. p2=2*PI
  121. p0=PI/180
  122. pd2=PI/2
  123. pday=p2/365.2422           ! 2*pi/days per year
  124. seg=279.04247*p0           ! sun's ecliptic longitude at 1975
  125. swg=282.510396*p0          ! sun's ecliptic longitude at perigee
  126. see=0.01672*2              ! eccentricy of earth orbit
  127. sepoch=5114                ! days between 1975 and 1989 (my base year)
  128. obliq=23.4333333*p0        ! obliquity of the ecliptic
  129. cobliq=COS(obliq)
  130. sobliq=SIN(obliq)
  131. cl9p0=COS(l9*p0)
  132. sl9p0=SIN(l9*p0)
  133. dseg=seg-swg
  134. ltsun=0
  135. w9x=w9/15
  136. REM  Greenwich Sidereal Time at New Year's
  137. yt%=0
  138. FOR y1=90 TO y
  139.   yd%=365
  140.   IF y1/4=INT(y1/4)
  141.     yd%=366
  142.   ENDIF
  143.   yt%=yt%+yd%
  144. NEXT y1
  145. g2=FRAC(yt%*g1+0.27676779)           ! Figure forward from 0.0.1989 GMT
  146. sepoch=sepoch+yt%
  147. REM  Routine to evaluate OBSERVER's GEOCENTRIC Coordinates, where
  148. REM   X-axis=GREENWICH, Y-axis goes thru India, Z-axis=North Pole
  149. l8=l9*p0
  150. s9=SIN(l8)
  151. c9=COS(l8)                                   ! Initial GEOCENTRIC coordinates
  152. s8=SIN(-w9*p0)
  153. c8=COS(w9*p0)                                ! W9= West longitude
  154. REM Now to account for flattened Earth
  155. r9=r0*(1-(f/2)+(f/2)*COS(2*l8))+h9/1000      ! H9=height in meters
  156. REM Now to make L8 the GEOCENTRIC latitude
  157. l8=ATN((1-f)^2*s9/c9)
  158. z9=r9*SIN(l8)
  159. x9=r9*COS(l8)*c8
  160. y9=r9*COS(l8)*s8
  161. REM   *********** get Parameters for Satellites *********
  162. PRINT "Reading orbital elements from file: ";el$
  163. PRINT
  164. ON ERROR GOSUB missing
  165. OPEN "I",#1,el$
  166. msx%=LOF(#1)/141
  167. IF msx%<ms
  168.   ms=msx%
  169. ENDIF
  170. DIM c(3,2),lvt%(200),s$(ms),y3(ms),t0(ms),mmr(ms),i0(ms),o0(ms),e0(ms)
  171. DIM w0(ms),m0(ms),n0(ms),k0(ms),a0(ms),xx%(ms),yy%(ms),e(ms),prob|(ms)
  172. sp%=0
  173. ON ERROR GOSUB baddy
  174. DO
  175.   EXIT IF EOF(#1)
  176.   LINE INPUT #1,ln$
  177.   EXIT IF EOF(#1)
  178.   LINE INPUT #1,l1$
  179.   EXIT IF EOF(#1)
  180.   LINE INPUT #1,l2$
  181.   WHILE LEFT$(l1$,1)<>"1" OR LEFT$(l2$,1)<>"2"
  182.     ln$=l1$
  183.     l1$=l2$
  184.     EXIT IF EOF(#1)
  185.     LINE INPUT #1,l2$
  186.   WEND
  187.   INC sp%
  188.   s$(sp%)="[                    ]"
  189.   MID$(s$(sp%),2,14)=LEFT$(ln$,14)
  190.   MID$(s$(sp%),17,5)=MID$(l1$,3,5)
  191.   y3(sp%)=VAL(MID$(l1$,19,2))
  192.   t0(sp%)=VAL(MID$(l1$,21,12))
  193.   IF y3(sp%)<y                     ! Correct for "old" orbital elements
  194.     yt%=0
  195.     FOR y1=y3(sp%) TO y-1
  196.       yd%=365
  197.       IF y1/4=INT(y1/4)
  198.         yd%=366
  199.       ENDIF
  200.       yt%=yt%+yd%
  201.     NEXT y1
  202.     t0(sp%)=t0(sp%)-yt%
  203.     y3(sp%)=y
  204.   ENDIF
  205.   mmr(sp%)=VAL(MID$(l1$,34,10))
  206.   i0(sp%)=VAL(MID$(l2$,9,8))
  207.   o0(sp%)=VAL(MID$(l2$,18,8))
  208.   e0(sp%)=VAL("."+MID$(l2$,27,7))
  209.   w0(sp%)=VAL(MID$(l2$,35,8))
  210.   m0(sp%)=VAL(MID$(l2$,44,8))
  211.   n0(sp%)=VAL(MID$(l2$,53,11))
  212.   k0(sp%)=VAL(MID$(l2$,64,5))
  213.   a0(sp%)=((g0/(n0(sp%)^2))^(1/3))
  214.   e(sp%)=0
  215.   PRINT sp%;TAB(5);s$(sp%)
  216.   IF sp%=ms
  217.     PRINT "Oops! Not enough room reserved for all satellite elements."
  218.     PRINT "Increase the variable -Ms- to a higher number and try again."
  219.     EDIT
  220.   ENDIF
  221.   IF INP?(2)
  222.     IF INP(2)=27
  223.       EDIT
  224.     ENDIF
  225.   ENDIF
  226. LOOP
  227. ON ERROR
  228. IF sp%=0
  229.   GOSUB missing
  230. ENDIF
  231. CLOSE #1
  232. mxsp%=sp%-1
  233. mxsps%=sp%
  234. FOR i%=1 TO mxsp%
  235.   prob|(i%)=0
  236. NEXT i%
  237. nowreck!=FALSE
  238. IF FRE(0)>50000
  239.   nowreck!=TRUE
  240.   DIM helparray%(33000/4)
  241.   helpstuff%=INT(VARPTR(helparray%(0))/256)*256+256
  242.   keepalive%=XBIOS(2)
  243. ENDIF
  244. REM   ******** Here follows the actual computation loop *********
  245. CLS
  246. SETCOLOR 0,0,0,0  ! For color 0 (black -- background)
  247. SETCOLOR 1,0,0,7  ! For color 2 (blue -- trails)
  248. SETCOLOR 3,7,0,0  ! For color 1 (red -- satellites/text/arrow)
  249. SETCOLOR 2,3,2,0  ! For color 3 (brown -- world map)
  250. DEFMOUSE 0
  251. DEFFILL 3,1
  252. white!=FALSE
  253. hilite!=FALSE
  254. facts!=FALSE
  255. clkon!=FALSE
  256. clkfast!=FALSE
  257. mapon!=TRUE
  258. equat!=FALSE
  259. helpme!=FALSE
  260. lookup!=FALSE
  261. found!=FALSE
  262. sunfacts!=FALSE
  263. sunchk!=FALSE
  264. radaron!=FALSE
  265. leaptime!=FALSE
  266. vpage%=0
  267. d$=CHR$(248)
  268. GOSUB map
  269. DO
  270.   GOSUB sun
  271.   IF sunfacts!
  272.     GOSUB factsun
  273.   ENDIF
  274.   FOR sp%=1 TO mxsp%
  275.     IF (NOT radaron!) OR (radaron! AND prob|(sp%)<1)
  276.       t=t7+(TIMER-tstart)/17280000
  277.       GOSUB fnc
  278.       COLOR 2
  279.       IF hilite!
  280.         IF sp%=sr%
  281.           COLOR 1
  282.         ENDIF
  283.       ENDIF
  284.       PLOT xx%(sp%),yy%(sp%)
  285.       COLOR 1
  286.       IF sunchk! AND ((NOT radaron!) OR (radaron! AND e9>0))
  287.         gcca=COS((sunlng-wx5-180)*p0)
  288.         gcsatc=(90-l5)*p0
  289.         gcangle=(ACOS(gcbcos*COS(gcsatc)+gcbsin*SIN(gcsatc)*gcca))/p0
  290.         IF gcangle>90
  291.           shad=r*COS((gcangle-90)*p0)
  292.           IF shad<r0
  293.             COLOR 2
  294.           ENDIF
  295.         ENDIF
  296.       ENDIF
  297.       IF radaron!
  298.         IF e9=>0
  299.           rrr=90-e9
  300.           yy%(sp%)=100-rrr*COSQ(a9)
  301.           xx%(sp%)=2.4*rrr*SINQ(a9)+320
  302.           PLOT xx%(sp%),yy%(sp%)
  303.         ENDIF
  304.       ELSE
  305.         yy%(sp%)=1.11111111*(90-l5)
  306.         xx%(sp%)=1.77777777*(360-wx5)
  307.         PLOT xx%(sp%),yy%(sp%)
  308.       ENDIF
  309.     ELSE
  310.       DEC prob|(sp%)
  311.     ENDIF
  312.     IF facts!
  313.       SWAP sp%,sr%
  314.       t=t7+(TIMER-tstart)/17280000
  315.       IF leaptime!
  316.         t=t+leapy
  317.       ENDIF
  318.       GOSUB fnc
  319.       LOCATE 1,1
  320.       PRINT USING "&###!"," AZ=",a9,d$;
  321.       LOCATE 9,1
  322.       PRINT USING "&-##!"," EL=",e9,d$;
  323.       IF NOT equat!
  324.         LOCATE 17,1
  325.         PRINT USING "&######!"," ALT=",(r-r0)*0.6215,"m";
  326.         LOCATE 29,1
  327.         PRINT USING "&-##!"," LT=",l5,d$;
  328.         LOCATE 37,1
  329.         PRINT USING "&-###!"," LN=",wx5-180,d$;
  330.       ELSE
  331.         REM Local horizon to Equatorial
  332.         sdec=ASIN(SIN(e9*p0)*sl9p0+COS(e9*p0)*cl9p0*COS(a9*p0))
  333.         sha=ACOS((SIN(e9*p0)-sl9p0*SIN(sdec))/cl9p0/COS(sdec))
  334.         IF SIN(a9*p0)>0
  335.           sha=p2-sha
  336.         ENDIF
  337.         sha=sha/15/p0/24
  338.         sra=FRAC(t*g1+g2-w9/360-sha)*24
  339.         ram=FRAC(sra)*60
  340.         ras=FRAC(ram)*60
  341.         sdec=sdec/p0
  342.         decm=FRAC(ABS(sdec))*60
  343.         decs=FRAC(decm)*60
  344.         LOCATE 17,1
  345.         PRINT USING "&##!##!##!"," RA=",INT(sra),"h",INT(ram),"m",ras,"s";
  346.         LOCATE 30,1
  347.         PRINT USING "&-##!##!##!"," DEC=",INT(sdec),d$,INT(decm),"'",decs,"""";
  348.       ENDIF
  349.       LOCATE 46,1
  350.       PRINT USING "&#####"," ORB#=",k;
  351.       LOCATE 58,1
  352.       IF leaptime!
  353.         PRINT ">< 30 Seconds Fast! ><";
  354.       ELSE
  355.         PRINT s$(sp%);
  356.       ENDIF
  357.       SWAP sp%,sr%
  358.     ENDIF
  359.     IF MOUSEK<>0 AND NOT lookup!
  360.       xm%=MOUSEX
  361.       ym%=MOUSEY
  362.       hilite!=FALSE
  363.       facts!=FALSE
  364.       sunfacts!=FALSE
  365.       PAUSE 1
  366.       mk%=MOUSEK
  367.       LOCATE 1,1
  368.       PRINT SPC(79);
  369.       found!=FALSE
  370.       FOR sr%=0 TO mxsps%
  371.         IF ((xx%(sr%)-xm%) AND &HFFE)=0 AND ((yy%(sr%)-ym%) AND &HFFE)=0
  372.           found!=TRUE
  373.           PRINT CHR$(7);    ! Sound bell!
  374.           PAUSE 50
  375.         ENDIF
  376.         EXIT IF found!
  377.       NEXT sr%
  378.       IF sr%=0
  379.         found!=FALSE
  380.         LOCATE 1,1
  381.         PRINT "[ YOUR Location ]   ";l9;d$'"Lat."'''w9;d$'"Long.";
  382.       ENDIF
  383.       IF sr%=mxsps%
  384.         found!=FALSE
  385.         sunfacts!=TRUE
  386.         GOSUB factsun
  387.       ENDIF
  388.       IF mk%=1 OR mk%=3
  389.         facts!=found!
  390.       ENDIF
  391.       IF mk%=2 OR mk%=3
  392.         hilite!=found!
  393.       ENDIF
  394.       found!=FALSE
  395.     ENDIF
  396.     IF INP?(2) OR found!=TRUE
  397.       IF found!=FALSE
  398.         ex$=INKEY$
  399.       ELSE
  400.         ex$="bleck"
  401.       ENDIF
  402.       IF helpme!=TRUE OR lookup!=TRUE AND ex$<>CHR$(0)+"H" AND ex$<>CHR$(0)+"P"
  403.         IF nowreck!
  404.           ~XBIOS(5,L:keepalive%,L:keepalive%,-1)
  405.           VSYNC
  406.           VSYNC
  407.         ELSE
  408.           GOSUB map
  409.         ENDIF
  410.         helpme!=FALSE
  411.         lookup!=FALSE
  412.         IF found!
  413.           LOCATE 1,1
  414.           PRINT SPC(79);
  415.           found!=FALSE
  416.         ENDIF
  417.         vpage%=0
  418.         ex$="bleck"
  419.       ENDIF
  420.       IF ex$=CHR$(27)      ! Esc key quits.
  421.         alt$="Really Quit?"
  422.         ALERT 3,alt$,1,"Quit!|Stay",but
  423.         IF but=1
  424.           GOSUB done
  425.         ENDIF
  426.       ENDIF
  427.       IF ex$=CHR$(0)+"b"   ! Help key
  428.         GOSUB help
  429.       ENDIF
  430.       IF ex$=CHR$(0)+"G"   ! Clr/Home key clears screen
  431.         GOSUB map
  432.       ENDIF
  433.       IF ex$=CHR$(0)+";"   ! F1 - toggel background
  434.         white!=NOT white!
  435.         IF white!
  436.           SETCOLOR 0,7,7,7
  437.           SETCOLOR 1,0,0,0
  438.           SETCOLOR 2,5,6,3
  439.         ELSE
  440.           SETCOLOR 0,0,0,0
  441.           SETCOLOR 1,0,0,7
  442.           SETCOLOR 3,7,0,0
  443.           SETCOLOR 2,3,2,0
  444.         ENDIF
  445.       ENDIF
  446.       IF ex$=CHR$(0)+"<"   ! F2 - toggel world map drawing
  447.         mapon!=NOT mapon!
  448.         IF mapon!
  449.           LOCATE 1,1
  450.           PRINT "Map/Grid   OFF  at next CLR/HOME    ";
  451.         ELSE
  452.           LOCATE 1,1
  453.           PRINT "Map/Grid   ON   at next CLR/HOME    ";
  454.         ENDIF
  455.         PAUSE 50
  456.         LOCATE 1,1
  457.         PRINT SPC(35);
  458.       ENDIF
  459.       IF ex$=CHR$(0)+"="   ! F3 - toggel clock
  460.         clkon!=NOT clkon!
  461.         clkfast!=FALSE
  462.         IF NOT clkon!
  463.           sf=8
  464.           LOCATE sf,25
  465.           PRINT SPC(64);
  466.           IF mapon! AND NOT radaron!
  467.             FILL 200,198
  468.           ENDIF
  469.         ELSE
  470.           sf=8
  471.           LOCATE sf,25
  472.           GOSUB disclk
  473.         ENDIF
  474.       ENDIF
  475.       IF ex$=CHR$(0)+">"   ! F4 - toggel fast clock
  476.         clkfast!=NOT clkfast!
  477.         clkon!=FALSE
  478.         IF NOT clkfast!
  479.           sf=8
  480.           LOCATE sf,25
  481.           PRINT SPC(64);
  482.           IF mapon! AND NOT radaron!
  483.             FILL 200,198
  484.           ENDIF
  485.         ELSE
  486.           sf=8
  487.           LOCATE sf,25
  488.           GOSUB disclk
  489.         ENDIF
  490.       ENDIF
  491.       IF ex$=CHR$(0)+"?" AND facts!   ! F5 - toggel equatorial/horizon
  492.         equat!=NOT equat!
  493.         LOCATE 17,1
  494.         PRINT SPC(30);
  495.       ENDIF
  496.       IF ex$=CHR$(0)+"@"   ! F6 - Toggel sunshine check
  497.         sunchk!=NOT sunchk!
  498.       ENDIF
  499.       IF ex$=CHR$(0)+"A"   ! F7 - Toggel RADAR screen / world view.
  500.         radaron!=NOT radaron!
  501.         GOSUB map
  502.       ENDIF
  503.       IF ex$=CHR$(0)+"B" AND facts!   ! F8 - Toggel Leap-Ahead 30 seconds.
  504.         leaptime!=NOT leaptime!
  505.       ENDIF
  506.       IF ex$=CHR$(0)+"P" AND lookup!     ! Directory page up.
  507.         vpage%=vpage%+110
  508.         IF vpage%>mxsp%
  509.           vpage%=vpage%-110
  510.           IF vpage%<0
  511.             vpage%=0
  512.           ENDIF
  513.         ENDIF
  514.         ex$=CHR$(0)+"R"
  515.       ENDIF
  516.       IF ex$=CHR$(0)+"H" AND lookup!     ! Directory page down.
  517.         vpage%=vpage%-110
  518.         IF vpage%<0
  519.           vpage%=0
  520.         ENDIF
  521.         ex$=CHR$(0)+"R"
  522.       ENDIF
  523.       IF ex$=CHR$(0)+"R"   ! INSERT - List and select from catalog
  524.         IF nowreck!
  525.           ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  526.           VSYNC
  527.           VSYNC
  528.           CLS
  529.         ENDIF
  530.         LOCATE 1,2
  531.         vv%=vpage%
  532.         vvv%=0
  533.         REPEAT
  534.           INC vvv%
  535.           INC vv%
  536.           PRINT MID$(s$(vv%),2,14)';
  537.           IF (vv% MOD 5)=0
  538.            PRINT
  539.           ENDIF
  540.         UNTIL vv%=mxsp% OR vvv%=110
  541.         LOCATE 31,24
  542.         PRINT "*** Use arrow keys to page up/down ***"
  543.         IF nowreck!
  544.           ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  545.         ENDIF
  546.         lookup!=TRUE
  547.         found!=FALSE
  548.       ENDIF
  549.     ENDIF
  550.     IF clkfast!
  551.       sf=8
  552.       LOCATE sf,25
  553.       GOSUB disclk
  554.     ENDIF
  555.     IF lookup!
  556.       IF nowreck!
  557.         ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  558.         VSYNC
  559.         VSYNC
  560.       ENDIF
  561.       xm%=MOUSEX
  562.       ym%=MOUSEY
  563.       IF ym%>7 AND ym%<184
  564.         srx%=vpage%+INT((ym%-8)/8)*5+INT(xm%/120)+1
  565.         IF srx%>mxsp%
  566.           srx%=mxsp%
  567.         ENDIF
  568.         IF srx%<0
  569.           srx%=1
  570.         ENDIF
  571.       ENDIF
  572.       IF MOUSEK<>0
  573.         PAUSE 1
  574.         mk%=MOUSEK
  575.         PRINT CHR$(7);
  576.         PAUSE 50
  577.         facts!=FALSE
  578.         hilite!=FALSE
  579.         sr%=srx%
  580.         IF mk%=1 OR mk%=3
  581.           facts!=TRUE
  582.         ENDIF
  583.         IF mk%=2 OR mk%=3
  584.           hilite!=TRUE
  585.         ENDIF
  586.         found!=TRUE
  587.       ENDIF
  588.       LOCATE 3,24
  589.       PRINT s$(srx%);
  590.       IF nowreck!
  591.         ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  592.       ENDIF
  593.     ENDIF
  594.   NEXT sp%
  595.   IF clkon!
  596.     sf=8
  597.     LOCATE sf,25
  598.     GOSUB disclk
  599.   ENDIF
  600. LOOP
  601. END
  602. PROCEDURE missing
  603.   PRINT "The data file is missing or empty!  You need the orbital elements"
  604.   PRINT "data for each satellite -- available on-line from the Celestial BBS,"
  605.   PRINT " @ 513-427-0674, Fairborn Ohio, TS Kelso -- sysop."
  606.   PRINT
  607.   PRINT "Or, if you have the file, make sure you change the path in the first"
  608.   PRINT "few lines of this program to point to it!  Right now the path is set"
  609.   PRINT "to point at ";el$
  610.   STOP
  611. RETURN
  612. PROCEDURE baddy
  613.   PRINT "The data file ";el$;" has problems."
  614.   PRINT "The most likely problem is that the line at the end of the file is"
  615.   PRINT "not terminated by a carriage return (CR) and/or line feed (LF)."
  616.   PRINT "Please correct the file and try it again!"
  617.   STOP
  618. RETURN
  619. PROCEDURE done
  620.   COLOR 1
  621.   SETCOLOR 0,7,7,7
  622.   SETCOLOR 3,0,0,0
  623.   SETCOLOR 1,7,0,0
  624.   SETCOLOR 2,0,7,0
  625.   EDIT
  626. RETURN
  627. PROCEDURE factsun
  628.   LOCATE 1,1
  629.   PRINT "[ Sun, Sol, Helios ]    ";
  630.   LOCATE 24,1
  631.   PRINT USING "-##.#####!&",decsun/p0,d$," Lat.   ";
  632.   LOCATE 42,1
  633.   PRINT USING "-###.#####!&",sunlng,d$," Long.    ";
  634. RETURN
  635. PROCEDURE help
  636.   IF nowreck!
  637.     ~XBIOS(5,L:helpstuff%,L:helpstuff%,-1)
  638.     VSYNC
  639.     VSYNC
  640.     CLS
  641.   ENDIF
  642.   LOCATE 1,1
  643.   PRINT "Aim mouse-arrow (carefully) at satellite of interest and:"
  644.   PRINT " DATA   - click LEFT mouse button to show data on that satellite."
  645.   PRINT " HILITE - click RIGHT mouse button to highlight (red) satellite trail."
  646.   PRINT " BOTH   - click BOTH mouse buttons to show data and highlight trail."
  647.   PRINT
  648.   PRINT "ESC        - Quit the program."
  649.   PRINT "Clr/Home   - Erase screen."
  650.   PRINT "HELP (key) - Toggel help information on/off."
  651.   PRINT "ALT+HELP   - Print screen (Hint: Toggel screen colors first (F1.))"
  652.   PRINT "INSERT     - Select specific satellite from list."
  653.   PRINT "F1 - Toggel screen colors (useful for screen dumps.)"
  654.   PRINT "F2 - Toggel world map on/off (takes effect at next Clr/Home press.)"
  655.   PRINT "F3 - Slow update clocks (once per loop of all satellites.)"
  656.   PRINT "F4 - Fast update clocks (once per each satellite update.)"
  657.   PRINT "F5 - Toggel between LT/LN/ALT and RA/DEC in satellite data line."
  658.   PRINT "F6 - Show only satellites in sunshine (not in earth's shadow.)"
  659.   PRINT "F7 - Toggel between WORLD VIEW and LOCAL RADAR."
  660.   PRINT "F8 - Toggel Jump-Ahead 30 seconds (for Sat. data only.)"
  661.   PRINT
  662.   PRINT " AZ(imuth) 0=N 90=E 180=S 270=W / EL(evation) 0=Horizon, 90=Overhead."
  663.   PRINT " ALT(itude) Miles above average sea-level."
  664.   PRINT " LT/LN: Latitude(90=N, -90=S) / Longitude(180=W, 0=Greenwich, -180=E.)"
  665.   PRINT " ORB#: Current revolution #.  / [ xx ] - Description and Satellite #."
  666.   PRINT " RA/DEC: Right Ascension (h m s) / Declination (d m s)."
  667.   PRINT " LT/LST/GMT/GST Local Solar/Sidereal  -  Greenwich Solar/Sidereal time.";
  668.   IF nowreck!
  669.     ~XBIOS(5,L:keepalive%,L:helpstuff%,-1)
  670.   ENDIF
  671.   helpme!=TRUE
  672. RETURN
  673. REM ********** ORBIT DETERMINATION ROUTINES ******************
  674. PROCEDURE fnc
  675.   REM Routine to initialize the C(J,K) coordinate rotation matrix
  676.   REM   and other parameters associated with the orbital elements.
  677.   REM       a0(sp%)=((g0/(n0(sp%)^2))^(1/3))
  678.   e2=1-e0(sp%)^2
  679.   e1=SQR(e2)
  680.   q0=m0(sp%)/360+k0(sp%)                       ! Q0=initial orbit phase
  681.   REM -----Account for nodal effects due to lumpy gravity field due to
  682.   REM        the flattened, oblate spheroid shape of Earth
  683.   k2=9.95*((r0/a0(sp%))^3.5)/(e2^2)
  684.   REM Update elements to current epoch and evaluate their SIN/COSs
  685.   s1=SIN(i0(sp%)*p0)
  686.   c1=COS(i0(sp%)*p0)                 ! I0=inclination
  687.   k2=(t-t0(sp%))*k2
  688.   o=o0(sp%)-k2*c1
  689.   s0=SIN(o*p0)
  690.   c0=COS(o*p0)                       ! O = R.A.A.N. (deg)
  691.   w=w0(sp%)+k2*(2.5*(c1^2)-0.5)
  692.   s2=SIN(w*p0)
  693.   c2=COS(w*p0)                       ! W = arg of perigee
  694.   REM Set up coordinate rotation matrix for the current orbit
  695.   c(1,1)=+(c2*c0)-(s2*s0*c1)
  696.   c(1,2)=-(s2*c0)-(c2*s0*c1)
  697.   c(2,1)=+(c2*s0)+(s2*c0*c1)
  698.   c(2,2)=-(s2*s0)+(c2*c0*c1)
  699.   c(3,1)=+(s2*s1)
  700.   c(3,2)=+(c2*s1)
  701.   REM ---- Function to evaluate M = MEAN ANOMALY in 0-2pi range----
  702.   REM          K = perigee passage counter
  703.   q=n0(sp%)*(t-t0(sp%))+q0
  704.   k=INT(q)
  705.   m=(q-k)*p2
  706.   REM Routine to solve KEPLER's equation, given M
  707.   REM  returns satellite's GEOCENTRIC coordinates
  708.   IF e(sp%)=0
  709.     e(sp%)=m+e0(sp%)*SIN(m)+0.5*(e0(sp%)^2)*SIN(2*m)    ! initial trial value
  710.   ENDIF
  711.   REM  interation loop to solve Kepler's transcental equation-------
  712.   e=e(sp%)
  713.   DO
  714.     s3=SIN(e)
  715.     c3=COS(e)
  716.     r3=1-e0(sp%)*c3
  717.     m1=e-e0(sp%)*s3
  718.     m5=m1-m
  719.     EXIT IF ABS(m5)<1.0E-06
  720.     e=e-m5/r3
  721.   LOOP
  722.   e(sp%)=e
  723.   REM  Now get satellite's XYZ coordinates------------
  724.   x0=a0(sp%)*(c3-e0(sp%))
  725.   y0=a0(sp%)*e1*s3
  726.   r=a0(sp%)*r3                        ! in the plane of the orbit
  727.   REM Now rotate from orbital plane to INERTIAL CELESTIAL Coordinates
  728.   x1=x0*c(1,1)+y0*c(1,2)
  729.   y1=x0*c(2,1)+y0*c(2,2)
  730.   z1=x0*c(3,1)+y0*c(3,2)
  731.   REM Rotate through current GHA of Aries, convert to GEOCENTRIC coordinates
  732.   g7=FRAC(t*g1+g2)*p2
  733.   s7=-SIN(g7)
  734.   c7=COS(g7)
  735.   x=+(x1*c7)-(y1*s7)
  736.   y=+(x1*s7)+(y1*c7)
  737.   z=z1
  738.   REM Routine to extract all the parameters you might ever need
  739.   REM    First get Vector from observer to satellite--
  740.   x5=(x-x9)
  741.   y5=(y-y9)
  742.   z5=(z-z9)
  743.   r5=SQR(x5^2+y5^2+z5^2)
  744.   REM Now rotate into observer' s LOCAL Coordinates----
  745.   REM where X8=North, Y8=East, Z8=Up (Left-handed system)
  746.   z8=+(x5*c8*c9)+(y5*s8*c9)+(z5*s9)
  747.   x8=-(x5*c8*s9)-(y5*s8*s9)+(z5*c9)
  748.   y8=+(y5*c8)-(x5*s8)
  749.   s5=z8/r5
  750.   c5=SQR(1-s5*s5)
  751.   e9=(ATN(s5/c5))/p0                   ! E9=elevation
  752.   dx=x8
  753.   dy=y8
  754.   GOSUB fna
  755.   a9=d/p0                              ! FNA resolves quadrant A9=Azimuth
  756.   dx=x
  757.   dy=y
  758.   GOSUB fna
  759.   w5=360-d/p0                          ! W5=SubSatellitePoint W.long.
  760.   wx5=(w5+180) MOD 360
  761.   b5=z/r
  762.   l5=ATN(b5/(SQR(1-b5^2)))/p0          ! L5=SSP Lat.
  763.   prob|(sp%)=0
  764.   IF e9<0
  765.     prob|(sp%)=ABS(e9)
  766.   ENDIF
  767. RETURN                            !---note R-R0=sat. alt. above mean spheroid
  768. REM --------------------------------------------------------------------
  769. PROCEDURE fna
  770.   REM Calculates INVERSE TANGENT in proper quadrant ala FORTRAN ATAN2
  771.   IF dx<0
  772.     d=PI+ATN(dy/dx)         ! Q2 or Q3
  773.   ENDIF
  774.   IF dx>0                   ! Q1 or Q4
  775.     IF dy>=0
  776.       d=ATN(dy/dx)
  777.     ELSE
  778.       d=p2+ATN(dy/dx)
  779.     ENDIF
  780.   ENDIF
  781.   REM The two cases for DX=0
  782.   IF dx=0
  783.     IF dy>=0
  784.       d=PI/2
  785.     ELSE
  786.       d=3*PI/2
  787.     ENDIF
  788.   ENDIF
  789. RETURN
  790. REM -------------------------------------------------------------------
  791. PROCEDURE disclk
  792.   t=t7+(TIMER-tstart)/17280000
  793.   PRINT DATE$';
  794.   LOCATE sf+11,25
  795.   ft=FRAC(t+tlocal/24)*24
  796.   @prtime
  797.   PRINT " LT";
  798.   LOCATE sf+24,25
  799.   ft=FRAC(t)*24
  800.   @prtime
  801.   PRINT " GMT";
  802.   LOCATE sf+38,25
  803.   ft=FRAC(t*g1+g2-w9/360)*24
  804.   @prtime
  805.   PRINT " LST";
  806.   LOCATE sf+52,25
  807.   ft=FRAC(t*g1+g2)*24
  808.   @prtime
  809.   PRINT " GST";
  810. RETURN
  811. PROCEDURE prtime
  812.   PRINT USING "##!",INT(ft)+100,":";
  813.   ft=FRAC(ft)*60
  814.   PRINT USING "##!",INT(ft)+100,":";
  815.   PRINT USING "##",INT(FRAC(ft)*60)+100;
  816. RETURN
  817. PROCEDURE sun
  818.   REM Where is the sun?
  819.   t=t7+(TIMER-tstart)/17280000
  820.   gst=t*g1+g2
  821.   lst=FRAC(gst-w9x/24)*24
  822.   nsun=pday*(sepoch+t)
  823.   lnsun=(nsun+see*SIN(nsun+dseg)+seg) MOD p2
  824.   REM Ecliptic to equatorial conversion
  825.   REM enter with lnsun=ecliptic longitude, ltsun=ecliptic latitude
  826.   decsun=ASIN(SIN(ltsun)*cobliq+COS(ltsun)*sobliq*SIN(lnsun))
  827.   rasun=(ATN(TAN(lnsun)*cobliq-(TAN(ltsun)*sobliq/COS(lnsun)))+p2) MOD p2
  828.   IF ABS(rasun-lnsun)>pd2
  829.     rasun=(rasun+3*PI) MOD p2
  830.   ENDIF
  831.   REM Equatorial to local horizon conversion
  832.   hangle=(p2/24*lst-rasun+p2) MOD p2
  833.   sdecsun=SIN(decsun)
  834.   cdecsun=COS(decsun)
  835.   altsun=ASIN(sdecsun*sl9p0+cdecsun*cl9p0*COS(hangle))
  836.   azsun=ACOS((sdecsun-sl9p0*SIN(altsun))/cl9p0/COS(altsun))
  837.   IF SIN(hangle)>0
  838.     azsun=p2-azsun
  839.   ENDIF
  840.   xxtt%=xx%(mxsps%)
  841.   yytt%=yy%(mxsps%)
  842.   gcdecsun=90-decsun/p0
  843.   gcbsin=SIN(gcdecsun*p0)
  844.   gcbcos=COS(gcdecsun*p0)
  845.   yy%(mxsps%)=1.11111111*gcdecsun
  846.   sunlong=(rasun/p0-FRAC(gst)*360+540) MOD 360
  847.   sunlng=180-((360+sunlong) MOD 360)
  848.   xx%(mxsps%)=1.77777777*sunlong
  849.   IF (xxtt%<>xx%(mxsps%) OR yytt%<>yy%(mxsps%)) AND NOT radaron!
  850.     COLOR 2
  851.     CIRCLE xxtt%,yytt%,4
  852.     COLOR 1
  853.     CIRCLE xx%(mxsps%),yy%(mxsps%),4
  854.   ENDIF
  855. RETURN
  856. PROCEDURE map
  857.   CLS
  858.   ARRAYFILL xx%(),-1
  859.   ARRAYFILL yy%(),-1
  860.   xx%(mxsps%)=-10
  861.   yy%(mxsps%)=-10
  862.   IF mapon!
  863.     IF NOT radaron!
  864.       RESTORE map
  865.       FOR mj%=0 TO 199
  866.         READ lvt%(mj%)
  867.       NEXT mj%
  868.       green!=FALSE
  869.       FOR my%=0 TO 199
  870.         ox%=0
  871.         nx%=640
  872.         lvs%=lvt%(my%)
  873.         REPEAT
  874.           IF lvs%<>0
  875.             READ nx%
  876.           ENDIF
  877.           IF green!
  878.             COLOR 3
  879.           ELSE
  880.             COLOR 0
  881.           ENDIF
  882.           DRAW ox%,my% TO nx%,my%
  883.           ox%=nx%
  884.           IF lvs%<>0
  885.             green!=NOT green!
  886.           ENDIF
  887.           DEC lvs%
  888.         UNTIL lvs%<=0
  889.         IF green!
  890.           COLOR 3
  891.           DRAW nx%,my% TO 640,my%
  892.         ENDIF
  893.       NEXT my%
  894.     ELSE
  895.       COLOR 3
  896.       FOR lvs%=10 TO 80 STEP 10
  897.         FOR my%=0 TO 360 STEP 10
  898.           ox%=SINQ(my%)*lvs%+100
  899.           nx%=320-COSQ(my%)*lvs%*2.4
  900.           PLOT nx%,ox%
  901.         NEXT my%
  902.       NEXT lvs%
  903.     ENDIF
  904.   ENDIF
  905.   IF NOT radaron!
  906.     yy%(0)=1.11111111*(90-l9)
  907.     wx5=w9+180
  908.     IF wx5>=360
  909.       wx5=wx5-360
  910.     ENDIF
  911.     xx%(0)=1.77777777*(360-wx5)
  912.     COLOR 2
  913.     CIRCLE xx%(0),yy%(0),3
  914.     COLOR 1
  915.     PLOT xx%(0),yy%(0)
  916.   ELSE
  917.     COLOR 3
  918.     PLOT 320,100
  919.     FOR my%=0 TO 360
  920.       ox%=SINQ(my%)*90+100
  921.       nx%=320-COSQ(my%)*90*2.4
  922.       PLOT nx%,ox%
  923.     NEXT my%
  924.   ENDIF
  925. RETURN
  926. REM World map data (by John Logajan) in scanned form (for data compression),
  927. REM left to right, top to bottom (0-639, 0-199.)
  928. REM The first 200 datums represent the number of color transitions per each
  929. REM line.  The remaining datums represent each X coordinate at which the
  930. REM transitions occur -- it is up to the software to keep track of the Y
  931. REM coordinate based on the transitions-count-per-line data.
  932. map:
  933. DATA 0,0,0,0,0,0,0,2,4,4,8,12,12,18,18,22,16,10,24,20,21,20,19,18,13,10,12,14
  934. DATA 16,17,14,12,12,16,18,18,18,16,18,20,18,20,18,10,12,8,10,12,12,16,20,18,20
  935. DATA 18,14,20,22,16,16,16,16,14,8,10,10,10,6,12,14,12,14,12,20,14,14,20,18,18
  936. DATA 18,18,14,12,14,12,12,12,18,18,16,20,16,12,14,16,12,10,10,10,14,16,18,18,12
  937. DATA 16,20,14,18,14,10,10,14,10,10,10,12,14,12,12,13,11,10,8,12,12,10,8,8,8,8,6
  938. DATA 6,6,6,6,6,6,8,8,10,6,6,6,6,6,4,6,6,6,8,6,4,4,4,2,4,4,2,4,4,2,4,4,0,0,0,0,0
  939. DATA 2,2,2,2,2,4,8,6,6,8,8,4,6,6,6,6,6,4,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,236,283
  940. DATA 163,201,207,285,159,196,203,300,157,182,198,297,352,369,485,495,146,156
  941. DATA 164,177,189,194,200,290,339,369,483,498,145,159,162,185,191,288,340,360
  942. DATA 490,496,501,507,114,117,121,126,135,139,146,159,161,186,190,287,342,354
  943. DATA 356,365,497,509,100,106,112,117,148,158,160,182,193,288,346,351,358,362
  944. DATA 436,443,496,520,99,106,113,116,125,131,136,139,141,144,149,156,159,180,196
  945. DATA 286,423,443,479,523,567,575,135,138,148,154,175,179,216,287,418,432,473
  946. DATA 523,565,578,581,589,98,111,161,171,218,286,416,427,470,522,99,110,114,121
  947. DATA 126,132,137,142,146,153,159,178,180,185,220,284,414,423,443,448,462,549
  948. DATA 569,576,97,110,111,135,137,141,145,154,160,189,220,282,411,419,442,450,452
  949. DATA 551,567,587,0,5,41,45,98,109,110,136,145,155,160,195,220,282,411,421,439
  950. DATA 551,554,591,637,3,31,61,88,93,114,139,146,154,170,199,222,282,357,376,414
  951. DATA 422,438,605,638,0,30,75,79,107,146,158,165,169,182,201,222,281,350,382,425
  952. DATA 434,438,632,0,4,24,121,128,138,142,171,184,202,226,276,345,388,396,402,406
  953. DATA 636,0,9,24,122,126,174,182,206,224,267,342,393,397,15,29,175,183,211,224
  954. DATA 261,343,394,397,19,22,166,186,210,224,259,277,282,284,294,342,16,21,164
  955. DATA 169,174,180,208,225,250,276,296,340,360,363,0,8,13,24,162,166,175,180,205
  956. DATA 227,249,277,295,337,359,360,0,14,19,27,159,165,175,191,206,228,248,279,291
  957. DATA 333,357,358,639,25,159,181,191,194,206,229,245,306,309,329,352,357,636,24
  958. DATA 155,181,193,199,203,231,246,328,351,357,631,24,153,181,197,233,245,328,352
  959. DATA 357,597,604,627,28,56,61,152,182,197,203,207,239,244,329,354,360,596,605
  960. DATA 617,32,52,73,155,180,199,201,209,311,315,329,353,359,585,588,596,603,613
  961. DATA 37,50,75,156,181,211,307,317,330,336,340,350,352,355,358,571,599,611,36,43
  962. DATA 47,50,78,161,183,212,307,317,341,350,352,354,357,569,597,610,32,40,45,47
  963. DATA 79,165,183,212,309,316,341,349,357,566,596,611,27,37,82,174,179,215,305
  964. DATA 307,310,318,334,340,343,346,356,566,596,608,26,29,83,86,87,174,178,219,302
  965. DATA 308,310,320,335,342,347,569,572,574,596,609,20,25,83,86,87,176,179,221,302
  966. DATA 308,312,321,329,570,571,575,596,605,84,87,90,143,147,177,179,221,303,308
  967. DATA 311,324,328,570,571,575,597,602,626,629,5,7,86,88,92,177,179,222,301,308
  968. DATA 310,323,326,570,571,575,598,602,91,216,312,321,323,570,572,576,597,600,92
  969. DATA 214,217,222,310,314,321,570,572,576,595,597,95,211,216,221,318,570,572,577
  970. DATA 98,161,166,206,214,224,315,570,572,574,99,159,163,165,168,207,216,223,314
  971. DATA 568,572,575,99,158,161,214,316,410,414,566,572,575,586,588,99,167,173,213
  972. DATA 318,374,378,406,412,426,428,565,571,573,582,587,99,164,168,172,175,210,317
  973. DATA 373,379,383,386,404,409,424,428,563,571,576,581,583,99,163,166,173,178,197
  974. DATA 202,205,305,345,347,372,389,405,411,561,571,580,98,163,166,174,177,195,303
  975. DATA 327,329,332,338,345,350,370,391,405,411,559,568,579,98,196,304,326,335,337
  976. DATA 339,349,352,370,377,385,393,407,412,553,568,575,99,193,304,324,334,338,342
  977. DATA 352,354,409,413,551,568,572,99,189,304,321,325,327,334,338,346,353,354,363
  978. DATA 366,410,413,535,536,549,568,573,100,188,303,320,324,326,334,338,348,351
  979. DATA 355,362,366,408,414,533,535,539,542,548,568,573,100,187,303,321,341,350
  980. DATA 356,364,366,407,415,531,541,549,567,572,102,186,304,319,342,348,357,363
  981. DATA 368,410,415,538,542,550,563,571,103,186,308,317,320,339,345,348,358,362
  982. DATA 369,538,544,551,561,571,104,186,310,313,318,340,361,367,378,382,383,534
  983. DATA 544,551,556,571,105,185,308,340,363,367,377,381,383,534,544,549,552,569
  984. DATA 108,182,305,340,382,535,551,563,111,180,303,346,356,362,381,535,550,559
  985. DATA 112,177,303,348,355,366,381,537,551,555,113,117,118,176,302,353,355,537
  986. DATA 551,554,113,117,119,176,302,538,114,118,120,162,168,177,295,297,301,406
  987. DATA 410,537,116,120,121,151,172,177,290,293,294,296,300,407,410,537,115,121
  988. DATA 123,148,172,178,298,382,383,408,411,535,117,122,124,148,173,178,180,183
  989. DATA 294,381,384,410,414,534,120,123,125,148,174,178,294,382,385,412,419,533
  990. DATA 120,124,127,147,175,177,180,182,293,383,386,412,416,421,428,436,438,532
  991. DATA 534,537,122,125,128,147,181,183,292,384,386,425,439,531,533,537,124,126
  992. DATA 130,147,171,179,291,384,388,426,442,529,533,536,35,37,39,40,132,147,169
  993. DATA 173,176,183,290,386,389,427,442,482,483,524,534,535,38,40,41,43,132,148
  994. DATA 159,166,289,387,389,426,443,478,483,513,514,519,41,45,132,149,159,165,184
  995. DATA 189,290,387,390,425,449,475,484,510,514,518,42,45,132,149,158,165,185,194
  996. DATA 290,387,392,423,449,473,486,509,513,518,135,165,187,191,197,201,291,388
  997. DATA 393,423,449,471,486,509,513,517,534,538,138,164,198,201,291,389,394,421
  998. DATA 450,469,488,510,533,538,141,164,290,390,395,418,450,467,487,512,533,538
  999. DATA 145,171,290,391,395,414,450,465,487,491,493,513,532,537,155,173,289,394
  1000. DATA 396,412,451,463,493,514,533,537,156,173,290,395,396,407,452,463,494,515
  1001. DATA 534,541,160,172,290,404,452,463,495,515,534,537,538,541,164,172,191,198
  1002. DATA 290,398,414,418,453,463,495,498,501,515,534,537,540,544,166,172,187,199
  1003. DATA 292,398,404,412,454,462,495,498,502,515,532,533,536,544,167,173,185,212
  1004. DATA 293,411,455,462,495,497,504,512,531,533,536,543,167,174,177,181,184,212
  1005. DATA 295,411,455,461,462,464,495,498,506,510,529,532,537,545,171,214,296,410
  1006. DATA 456,460,461,465,494,499,506,508,528,530,538,545,174,178,180,216,297,409
  1007. DATA 461,466,494,499,537,546,181,218,298,409,461,466,495,501,527,530,536,538
  1008. DATA 540,546,182,225,301,324,328,408,462,465,489,491,496,503,526,531,540,545
  1009. DATA 182,228,303,319,329,407,489,495,498,504,523,533,182,230,330,405,490,497
  1010. DATA 499,504,521,531,182,230,335,404,492,498,500,504,518,529,180,230,337,403
  1011. DATA 493,500,517,530,546,548,178,232,336,400,492,504,515,532,534,538,541,543
  1012. DATA 546,549,157,158,177,231,336,398,496,505,515,532,533,535,537,542,546,549
  1013. DATA 157,159,176,237,335,376,381,397,497,505,515,529,532,534,546,548,551,562
  1014. DATA 157,158,176,241,336,375,380,395,498,509,515,529,532,536,546,549,552,567
  1015. DATA 176,244,336,394,499,510,515,528,531,535,554,571,177,251,337,392,500,510
  1016. DATA 516,527,531,541,544,553,554,576,589,591,175,253,339,391,502,509,523,526
  1017. DATA 532,535,536,539,544,547,551,553,556,578,589,593,175,258,340,390,503,509
  1018. DATA 532,535,537,540,562,580,588,592,175,258,341,390,505,510,532,535,538,540
  1019. DATA 558,560,565,582,585,591,595,597,176,259,342,391,512,523,558,560,566,582
  1020. DATA 586,588,595,598,178,259,342,390,509,525,543,546,566,584,179,259,343,391
  1021. DATA 517,547,569,576,580,584,180,258,343,391,531,535,539,544,570,575,581,587
  1022. DATA 603,606,180,257,343,393,539,542,582,589,605,609,181,255,344,393,551,557
  1023. DATA 572,574,608,609,182,254,344,393,406,409,551,564,572,575,12,13,184,253,342
  1024. DATA 392,406,409,551,564,572,576,12,16,184,251,342,393,404,410,544,547,550,562
  1025. DATA 571,576,185,251,341,393,404,410,542,562,571,579,616,618,186,251,340,392
  1026. DATA 400,410,541,565,571,579,616,618,189,251,340,391,398,409,537,568,570,580
  1027. DATA 617,619,637,0,192,251,340,390,398,408,537,580,635,638,195,250,341,386,398
  1028. DATA 408,536,581,635,638,195,250,342,384,398,408,535,583,195,249,342,382,398
  1029. DATA 407,421,423,530,585,612,613,195,248,343,383,397,407,418,420,525,586,612
  1030. DATA 616,195,248,344,383,396,406,522,588,614,618,194,246,345,384,396,405,522
  1031. DATA 589,194,240,345,384,397,405,521,590,194,237,345,383,397,405,521,592,194
  1032. DATA 235,346,381,399,404,521,592,194,234,346,379,521,593,193,234,347,379,522
  1033. DATA 593,193,234,348,378,523,594,192,233,349,377,524,593,192,231,350,375,524
  1034. DATA 593,192,230,350,375,525,593,192,230,352,373,525,592,192,227,351,372,525
  1035. DATA 543,558,591,192,226,352,369,524,541,559,590,191,225,354,365,524,533,560
  1036. DATA 589,627,629,191,219,562,588,627,631,190,220,563,588,628,633,189,219,568
  1037. DATA 587,630,638,188,218,570,586,630,637,189,215,574,581,628,637,188,210,629
  1038. DATA 635,188,210,577,584,626,634,188,207,577,584,624,633,188,207,578,584,623
  1039. DATA 630,5,7,187,205,579,582,620,628,6,7,187,205,617,626,187,204,616,625,185
  1040. DATA 201,616,624,185,204,617,620,185,204,185,201,442,446,185,200,442,445,186
  1041. DATA 198,186,198,213,218,186,199,214,216,188,200,189,205,252,257,193,205,255
  1042. DATA 257,237,241,215,218,212,218,212,220,207,219,205,216,545,551,203,215,497
  1043. DATA 511,516,528,544,566,196,214,409,425,466,577,196,211,394,444,460,582,192
  1044. DATA 210,379,446,456,587,593,601,185,189,192,210,332,344,369,607,184,211,306
  1045. DATA 618,173,178,184,212,298,625,137,158,171,212,295,624,100,113,127,213,287
  1046. DATA 620,97,114,125,213,279,617,70,88,95,211,275,613,54,209,271,610,0,219,262
  1047. DATA 610,627,226,256
  1048. REM -- SYMBOL TABLE -- (ala Clark and Tilley)
  1049. REM A0 = SEMI-MAJOR axis
  1050. REM A9 = Azimuth
  1051. REM Cn = COSines, C(J,K) also
  1052. REM E0 = eccentricity of orbit
  1053. REM E8 = observer horizion
  1054. REM E9 = satellite elevation
  1055. REM G0 = GM of Earth
  1056. REM G1 = Sidereal/Solar
  1057. REM G2 = New Year's sidereal time
  1058. REM G7 = GHA Aries
  1059. REM H1 = Hours duration
  1060. REM H3 = Hour epoch
  1061. REM H4 = Hour
  1062. REM H9 = observer height
  1063. REM K0 = initial orbit #
  1064. REM K  = orbit counter
  1065. REM K7 = INT(T)
  1066. REM L5 = SSP LATITUDE
  1067. REM L8 = GEOCENTRIC latitude
  1068. REM L9 = observer longitude
  1069. REM M  = mean anomaly
  1070. REM M0 = mean anomaly of ref epoch
  1071. REM M3 = ref epoch minutes
  1072. REM M4 = integer minutes
  1073. REM M5 = difference in Transcendental Eq.
  1074. REM N0 = mean motion
  1075. REM O, O0 = R.A.A.N.
  1076. REM P0,P1,P2 variations on a theme of PI
  1077. REM Q,Q0 = total orbits
  1078. REM R = ? in plane of orbit
  1079. REM R5 = range
  1080. REM R6 = previous range
  1081. REM R9 intermediate for GEOCENTRICs
  1082. REM Ss used for SIN
  1083. REM T0 = ref time in orbit days
  1084. REM W, W0 arg of perigee
  1085. REM W5 = SSP W. long.
  1086. REM W9 = observers W. long
  1087. REM X0,Y0,R coord in plane of orbit
  1088. REM X1,Y1,Z1 "    " INERTIAL CELESTIAL
  1089. REM X,Y,Z in GEOCENTRIC coordinates
  1090. REM X9,Y9,Z9 are observer's GEOCENTRIC coordinates
  1091. REM X5,Y5,Z5 ==> R5  vector from observer to satellite
  1092. REM X8,Y8,Z8 are observer's LOCAL Coordinates
  1093.  
  1094.